
package org.finegold.core.netty.core.codc;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import org.finegold.core.netty.core.model.ServerResponse;

/**
 * 数据包格式
 * +——----——+——-----——+——----——+——----——+——----——+——----——+
 * |  包头	|  模块号      |  命令号    |  结果码    |  长度       |   数据     |
 * +——----——+——-----——+——----——+——----——+——----——+——----——+
 * </pre>
 *
 * @author QinYueFeng
 * @since: 1.0
 * Create Date Time: 2018/7/4 17:45
 * Update Date Time:
 * @see
 */
public class ResponseEncoder extends MessageToByteEncoder<ServerResponse> {
    @Override
    protected void encode(ChannelHandlerContext ctx, ServerResponse response, ByteBuf buffer) throws Exception {
        //包头
        buffer.writeInt(ConstantValue.HEADER_FLAG);
        //module和cmd
        buffer.writeShort(response.getModule());
        buffer.writeShort(response.getCmd());
        //结果码
        buffer.writeInt(response.getStateCode());
        //长度
        int length = response.getData() == null ? 0 : response.getData().length;
        if (length <= 0) {
            buffer.writeInt(length);
        } else {
            buffer.writeInt(length);
            buffer.writeBytes(response.getData());
        }
    }
}
